package com.test.myrxjava.core;

import com.test.myrxjava.R;
import com.test.myrxjava.core.map.Function;
import com.test.myrxjava.core.map.ObservableMap;

public abstract class Observable<T> implements ObservableSource<T>{//被观察者抽象类

    @Override
    public void subscribe(Observer observer) {//接收观察者接口实现
        //和谁建立订阅

        //怎样建立订阅

        //为了保证扩展性，交给具体的开发人员实现，这里提供一个抽象的方法
        subscribeActual(observer);
    }

    protected abstract void subscribeActual(Observer observer);//接收观察者抽象实现方法

    public static <T> Observable<T> create(ObservableOnSubscribe<T> source){//被观察者  被观察
        return new ObservableCreate<>(source);
    }

    public ObservableMap<T, R> map(Function<T,R> function){
        return new ObservableMap<T,R>(this,function);

    }
}
